import express from 'express';
import { StudentController } from '../controllers/student.controller';
import { body, query, param } from 'express-validator';
import { validate } from '../middlewares/validator';

const router = express.Router();

/**
 * 学生信息路由
 */

// 创建学生信息
router.post(
  '/',
  [
    body('studentNo')
      .trim()
      .notEmpty().withMessage('学号不能为空')
      .matches(/^[0-9]{8,12}$/).withMessage('学号格式不正确，应为8-12位数字'),
    body('name')
      .trim()
      .notEmpty().withMessage('姓名不能为空')
      .isLength({ min: 2, max: 50 }).withMessage('姓名长度应在2-50个字符之间'),
    body('className')
      .trim()
      .notEmpty().withMessage('班级不能为空'),
    body('grade')
      .isInt({ min: 0, max: 100 }).withMessage('成绩应为0-100的整数'),
    body('email')
      .optional()
      .isEmail().withMessage('邮箱格式不正确'),
    body('phone')
      .optional()
      .matches(/^1[3-9]\d{9}$/).withMessage('手机号格式不正确'),
    body('gender')
      .optional()
      .isIn(['male', 'female', 'other']).withMessage('性别只能是male、female或other'),
    validate
  ],
  StudentController.createStudent
);

// 获取学生列表（支持分页、筛选）
router.get(
  '/',
  [
    query('page').optional().isInt({ min: 1 }).withMessage('页码必须是正整数'),
    query('limit').optional().isInt({ min: 1, max: 100 }).withMessage('每页数量应在1-100之间'),
    query('minGrade').optional().isInt({ min: 0, max: 100 }).withMessage('最低成绩应为0-100'),
    query('maxGrade').optional().isInt({ min: 0, max: 100 }).withMessage('最高成绩应为0-100'),
    query('sortBy').optional().isIn(['createdAt', 'grade', 'name', 'studentNo']).withMessage('排序字段不合法'),
    query('order').optional().isIn(['asc', 'desc']).withMessage('排序方向只能是asc或desc'),
    validate
  ],
  StudentController.getStudents
);

// 获取成绩统计
router.get(
  '/analysis/statistics',
  [
    query('className').optional().trim(),
    validate
  ],
  StudentController.getStatistics
);

// 生成AI分析报告
router.post(
  '/analysis/ai-report',
  [
    body('studentId').optional().isMongoId().withMessage('学生ID格式不正确'),
    body('className').optional().trim(),
    validate
  ],
  StudentController.generateAIReport
);

// 批量导入学生信息
router.post(
  '/batch',
  [
    body('students').isArray({ min: 1 }).withMessage('请提供学生数据数组'),
    body('students.*.studentNo')
      .trim()
      .notEmpty().withMessage('学号不能为空')
      .matches(/^[0-9]{8,12}$/).withMessage('学号格式不正确'),
    body('students.*.name')
      .trim()
      .notEmpty().withMessage('姓名不能为空'),
    body('students.*.className')
      .trim()
      .notEmpty().withMessage('班级不能为空'),
    body('students.*.grade')
      .isInt({ min: 0, max: 100 }).withMessage('成绩应为0-100的整数'),
    validate
  ],
  StudentController.batchCreateStudents
);

// 获取单个学生详情
router.get(
  '/:id',
  [
    param('id').isMongoId().withMessage('学生ID格式不正确'),
    validate
  ],
  StudentController.getStudentById
);

// 更新学生信息
router.put(
  '/:id',
  [
    param('id').isMongoId().withMessage('学生ID格式不正确'),
    body('name')
      .optional()
      .trim()
      .isLength({ min: 2, max: 50 }).withMessage('姓名长度应在2-50个字符之间'),
    body('className')
      .optional()
      .trim()
      .notEmpty().withMessage('班级不能为空'),
    body('grade')
      .optional()
      .isInt({ min: 0, max: 100 }).withMessage('成绩应为0-100的整数'),
    body('email')
      .optional()
      .isEmail().withMessage('邮箱格式不正确'),
    body('phone')
      .optional()
      .matches(/^1[3-9]\d{9}$/).withMessage('手机号格式不正确'),
    body('gender')
      .optional()
      .isIn(['male', 'female', 'other']).withMessage('性别只能是male、female或other'),
    validate
  ],
  StudentController.updateStudent
);

// 删除学生信息
router.delete(
  '/:id',
  [
    param('id').isMongoId().withMessage('学生ID格式不正确'),
    validate
  ],
  StudentController.deleteStudent
);

export default router;
